package com.gusil.commonmodule.entity.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtUtil {
    private static final String USERNAME = "admin";

    // 用于签名加密的密钥，为一个字符串（需保密）
    private static final String KEY = "token_key";

    // 过期时间 1分钟
    public static final int TOKEN_TIME_OUT = 1000 * 60;

    public static String getToken(String userId) {
        //获取jwt生成器
        JWTCreator.Builder jwtBuilder = JWT.create();
        Map<String, Object> headers = new HashMap<>();
        headers.put("typ", "jwt");
        headers.put("alg", "hs256");
        // 开始生成token
        // 讲准备好的header设置进去
        String token = jwtBuilder.withHeader(headers)
                // 设置Payload， Claim中的键值可自定义
                // 设置用户id
                .withClaim("userId", userId)
                // token失效时间，这里为一天后失效
                .withExpiresAt(new Date(System.currentTimeMillis() + TOKEN_TIME_OUT))
                //设置jwt的发行时间，一般为系统时间
                .withIssuedAt(new Date(System.currentTimeMillis()))
                // token发行者
                .withIssuer(USERNAME)
                // 进行签名，选择加密算法，以一个字符串密钥为参数
                .sign(Algorithm.HMAC256(KEY));
        // token生效完毕、可以发送给客户端了，前端可用
        // localStorage.setItem("your_token", token)进行存储，下次请求时携带发送个服务端进行验证
        System.out.println(token);
        return token;
    }

    public static boolean verify(String token) {
        return true;
    }
}
